在踏入工程師的領域之後,隨著需要開發的軟體越來越多,就會需要在自己的電腦上裝上各式各樣的環境來符合每套專案,有些專案需要node 22+nginx才能使用,有些是java+postgres,而這些設定會讓每次要開發前,都需要花上大量的時間來進行環境設定,更不用說有些專案不會好好的將自己需要的環境寫在Readme裡面,就會導致拿到一個專案,卻不曉得應該怎麼啟動他
這時候,使用docker這項服務就可以快速的排解這些相依環境或是服務的問題了
他是一個更輕量的VM的服務,會與宿主共用CPU/Ram,並且管理每個服務的Network以及disk的需求,而這些VM需要的資源跟執行的指令會預先被使用者用描述檔(Dockerfile)所定義
而當使用者需要啟用這個服務,會先透過這個描述檔,產生出相對應的image,並且可以在有需要的時候開啟一個服務,來運行這個image,執行後的內容被稱為 container
所以整個流程可以被簡化成下面這個流程
Dockerfile ==Build==> Image ==Run==> Container
所以回到一開始的使用情境,當我們需要postgreSQL,我們就可以去找到Postgres的Dockerfile,然後在自己的電腦Build這個Dockefile並且運行他,如此一來你就可以有一個標準的Postges了
而當你不需要使用時,只要把這個Container砍掉,就可以簡單的將資源清乾淨,讓每台電腦的資源可以被更有效的運用
而從上方的流程中可以發現到,其實Image也是一個實體的檔案,所以如果我們可以把Image複製到另一台電腦上,就算沒有Dockerfile,也可以順利的啟動Container,流程上會變成
Image Registry ==Download==> PC ==Run==> Container
而這個流程,通常也是我們一般來說更常見的使用方式,舉個上方需要postgreSQL的內容
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres:16
這段內容表示
my-postgres
POSTGRES_PASSWORD
是mysecretpassword
5432
導傳到Container的port的5432
postgres:16
(https://hub.docker.com/_/postgres)這個image